/**
 * Model zu PlayerCardView
 *
 * @author Michael Hansen
 * @author Lukas Thuernagel
 * @author Soeren Warszus
 */
package risk.game;

import java.awt.*;
import java.util.*;
import risk.card.*;
import risk.player.*;
import javax.swing.*;

/**
 * Die Klasse PlayerCard repraesentiert den Kartenbestand des Spielers
 * 
 */
public class PlayerCard {
    //PlayerModel der die jeweilige Karte besitzt
    private PlayerModel pm = null;
    
    //Dazugehoeriger View
    private PlayerCardView pcv = null;

    
    /**
     * Temporaere Liste der eingetauschten Karten, die wieder in den Stapel der Restkarten
     * gebracht werden soll, damit die Karten nicht ausgehen
     */
    private ArrayList<Card> tmpCardList = new ArrayList<Card>();
    
    public PlayerCard(PlayerModel pm){
        this.pm = pm;
    }
    
    /**
     * Gibt das jeweilige Model zurueck
     *
     * @return PlayerModel pm Gibt den betreffenden Spieler zurueck
     */
    public PlayerModel getPlayerModel(){
        return this.pm;
    }
    
    /**
     * Methode zum registrieren des Views
     *
     * @param PlayerCardView pcv Der zu registrierende View
     */
    public void registerView (PlayerCardView pcv) 
    {
        if (pcv == null) {
            throw new IllegalArgumentException("Cannot add null object to OptionsModel");
        }
        
        this.pcv = pcv;
    }
    
    /**
     * Methode zum ermittlen des Kartenbonus
     *
     * @return int cardBonus Gibt die Anzahl der Bonustruppen zurueck
     * @param ArrayList<Card> cl Die Karten aus denen der Bonus berechnet werden soll
     */
    /*public int getCardBonus(){
        int cardBonus=0;
        //Erstellen einer Liste der angewaehlten Karten
        ArrayList<Card> checkedCardList = new ArrayList<Card>(this.cardList);
        for (int i=0; i<this.cardList.size(); i++){
            if (!((JCheckBox)pcv.getCheckBoxList().get("checkbox"+i)).isSelected()){
                checkedCardList.remove(this.cardList.get(i));
            }
        }
        
        //Berechnung des Bonus der angewaehlten Karten
        for (int j=0; j<checkedCardList.size(); j++){
            //Wenn nicht 3 Karten ausgewaehlt wurden...
            if (checkedCardList.size() != 3){
                System.out.println("Unzulaessige Kartenanzahl gewaehlt");
            }
            //Ansonsten betrachte die folgenden Faelle:
            else{
                //1. Die erste Karte ist ein Joker... 
                if(checkedCardList.get(j).getSymbol() == "Joker"){
                    //...dann gibt es wenn die anderen beiden Karten gleich sind und zwar...
                    if (checkedCardList.get(j+1).getSymbol() == checkedCardList.get(j+2).getSymbol()){
                        //...Infanterie, Kartenbonus von 4
                        if (checkedCardList.get(j+1).getSymbol() == "Infanterie"){
                            cardBonus=4;
                        }
                        //...Kavallerie, Kartenbonus von 6
                        else if (checkedCardList.get(j+1).getSymbol() == "Kavallerie"){
                            cardBonus=6;
                        }
                        //...oder Artillerie, Kartenbonus von 8
                        else if (checkedCardList.get(j+1).getSymbol() == "Artillerie"){
                            cardBonus=8;
                        }
                    }
                    //...sind sie jedoch verschieden, gibt es auf jedenfall Truppenbonus von 10,
                    //da dann der Joker die fehlende unterscheidliche Karte ersetzt...
                    else if (checkedCardList.get(j+1).getSymbol() != checkedCardList.get(j+2).getSymbol()){
                        cardBonus=10;
                    }
                    //...und die getauschten karten werden aus der Kartenliste entfernt
                    cardList.remove(checkedCardList.get(j));
                    cardList.remove(checkedCardList.get(j+1));
                    cardList.remove(checkedCardList.get(j+2));
                    tmpCardList.add(checkedCardList.get(j));
                    tmpCardList.add(checkedCardList.get(j+1));
                    tmpCardList.add(checkedCardList.get(j+2));
                }
                //2. Die zweite Karte ist ein Joker... analog zu 1.
                else if (checkedCardList.get(j+1).getSymbol() == "Joker"){
                    if (checkedCardList.get(j).getSymbol() == checkedCardList.get(j+2).getSymbol()){
                        if (checkedCardList.get(j).getSymbol() == "Infanterie"){
                            cardBonus=4;
                        }
                        else if (checkedCardList.get(j).getSymbol() == "Kavallerie"){
                            cardBonus=6;
                        }
                        else if (checkedCardList.get(j).getSymbol() == "Artillerie"){
                            cardBonus=8;
                        }
                    }
                    else if (checkedCardList.get(j).getSymbol() != checkedCardList.get(j+2).getSymbol()){
                        cardBonus=10;
                    }
                    cardList.remove(checkedCardList.get(j));
                    cardList.remove(checkedCardList.get(j+1));
                    cardList.remove(checkedCardList.get(j+2));
                    tmpCardList.add(checkedCardList.get(j));
                    tmpCardList.add(checkedCardList.get(j+1));
                    tmpCardList.add(checkedCardList.get(j+2));
                }
                //3. Die dritte Karte ist ein Joker... analog zu 1.
                else if (checkedCardList.get(j+2).getSymbol() == "Joker"){
                    if (checkedCardList.get(j).getSymbol() == checkedCardList.get(j+1).getSymbol()){
                        if (checkedCardList.get(j).getSymbol() == "Infanterie"){
                            cardBonus=4;
                        }
                        else if (checkedCardList.get(j).getSymbol() == "Kavallerie"){
                            cardBonus=6;
                        }
                        else if (checkedCardList.get(j).getSymbol() == "Artillerie"){
                            cardBonus=8;
                        }
                    }
                    else if (checkedCardList.get(j).getSymbol() != checkedCardList.get(j+1).getSymbol()){
                        cardBonus=10;
                    }
                    cardList.remove(checkedCardList.get(j));
                    cardList.remove(checkedCardList.get(j+1));
                    cardList.remove(checkedCardList.get(j+2));
                    tmpCardList.add(checkedCardList.get(j));
                    tmpCardList.add(checkedCardList.get(j+1));
                    tmpCardList.add(checkedCardList.get(j+2));
                }
                //4. Alle 3 Karten sind gleich...
                else if (checkedCardList.get(j).getSymbol() == checkedCardList.get(j+1).getSymbol() &&
                    checkedCardList.get(j+1).getSymbol() == checkedCardList.get(j+2).getSymbol()){
                    //...und bei Infanterie is der Kartenbonus 4
                    if (checkedCardList.get(j).getSymbol()=="Infanterie"){
                        cardBonus=4;
                    }
                    //...bei Kavallerie 6
                    else if (checkedCardList.get(j).getSymbol()=="Kavallerie"){
                        cardBonus=6;
                    }
                    //...und bei Artillerie 8
                    else if (checkedCardList.get(j).getSymbol()=="Artillerie"){
                        cardBonus=8;
                    }
                    //Danach werden die eingetauschten Karte aus der Kartenliste des Spielers entfernt
                    cardList.remove(checkedCardList.get(j));
                    cardList.remove(checkedCardList.get(j+1));
                    cardList.remove(checkedCardList.get(j+2));
                    tmpCardList.add(checkedCardList.get(j));
                    tmpCardList.add(checkedCardList.get(j+1));
                    tmpCardList.add(checkedCardList.get(j+2));
                }
                //5. Alle 3 Karten sind verschieden voneinander, der Bonus ist 10...
                else if (checkedCardList.get(j).getSymbol() != checkedCardList.get(j+1).getSymbol() &&
                         checkedCardList.get(j+1).getSymbol() != checkedCardList.get(j+2).getSymbol()){
                         cardBonus=10;
                }
                //...und die Karten werden wieder entfernt.
                cardList.remove(checkedCardList.get(j));
                cardList.remove(checkedCardList.get(j+1));
                cardList.remove(checkedCardList.get(j+2));
                tmpCardList.add(checkedCardList.get(j));
                tmpCardList.add(checkedCardList.get(j+1));
                tmpCardList.add(checkedCardList.get(j+2));
                
                //6. Keine der obigen Faelle tritt ein, dann bleibt cardBonus auf 0.
            }
        }
        return cardBonus;
    }*/
    
    /**
     * Methode die die gerade eingetauschten Karten zurueckgibt.
     *
     * @return ArrayList<Card> tmpCardList Liste der gerade eingetauschten Karten
     */
    public ArrayList<Card> getTmpCardList(){
        return this.tmpCardList;
    }
    
    /**
     * Loescht die Liste der temporaeren Karten
     */
    public void deleteTmpCardList(){
        this.tmpCardList.clear();
    }
}